

package jumavidesktop.Persistencia.entidades;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import jumavidesktop.Persistencia.entidades.EnumeracionesEntidades.TipoMovimiento;

/**
 *
 * @author vimso
 */
@Entity
@Table(name = "movimientos")
@NamedQueries({
    @NamedQuery(name = "Movimientos.findAll", query = "SELECT m FROM Movimientos m"),
    @NamedQuery(name = "Movimientos.findById", query = "SELECT m FROM Movimientos m WHERE m.id = :id"),
    @NamedQuery(name = "Movimientos.findByFechaYHora", query = "SELECT m FROM Movimientos m WHERE m.fechaYHora = :fechaYHora"),
    @NamedQuery(name = Movimientos.BUSCAR_POR_MATRICULA, query = "SELECT m FROM Movimientos m WHERE m.matricula = :"+Movimientos.PA_BUSCAR_MATRICULA),
    @NamedQuery(name = Movimientos.BUSCAR_POR_CAMARA, query = "SELECT m FROM Movimientos m WHERE m.camaraid= :"+Movimientos.PA_BUSCAR_CAMARA),
    @NamedQuery(name = Movimientos.BUSCAR_POR_FILTROS, 
        query = "SELECT m FROM Movimientos m "
        + " WHERE  m.camaraid.nombre  BETWEEN :"+Movimientos.PA_BUSCAR_FILTRO_CAMARA_INICIO+" AND :"+ Movimientos.PA_BUSCAR_FILTRO_CAMARA_FIN //Keda obtener el nombre del campo
        + " AND  m.fechaYHora  BETWEEN:"+Movimientos.PA_BUSCAR_FILTRO_FECHA_INICIO+" AND :"+ Movimientos.PA_BUSCAR_FILTRO_FECHA_FIN
        + " AND  m.matricula.matricula  BETWEEN:"+Movimientos.PA_BUSCAR_FILTRO_MATRICULA_INICIO+" AND :"+ Movimientos.PA_BUSCAR_FILTRO_MATRICULA_FIN
        + " AND  m.matricula.usuario.dni  BETWEEN:"+Movimientos.PA_BUSCAR_FILTRO_DNI_INICIO+" AND :"+ Movimientos.PA_BUSCAR_FILTRO_DNI_FIN //Keda poner los dos campos
        
        ),
    @NamedQuery(name = "Movimientos.findByFoto", query = "SELECT m FROM Movimientos m WHERE m.foto = :foto")})
public class Movimientos implements Serializable {    
    
//    
//    select m from MainInterval m where m.mainIntervalStart 
//BETWEEN :startDate AND :endDate 
//AND m.mainIntervalEnd BETWEEN :startDate AND :endDate
        
    //<editor-fold defaultstate="collapsed" desc="Constatnes nameqquery">
    public static final String BUSCAR_POR_MATRICULA = "Movimientos.findByMatricula";
    public static final String BUSCAR_POR_CAMARA= "Movimientos.findByCamara";
    public static final String BUSCAR_POR_FILTROS= "Movimientos.findByFiltros";
    
    public static final String PA_BUSCAR_MATRICULA = "matricula";
    public static final String PA_BUSCAR_CAMARA = "camara";
    
    //////////
    
    public static final String PA_BUSCAR_FILTRO_FECHA_INICIO = "Filtro_Fecha_Inicio";
    public static final String PA_BUSCAR_FILTRO_FECHA_FIN = "Filtro_Fecha_Fin";
    
    public static final String PA_BUSCAR_FILTRO_DNI_INICIO = "Filtro_DNI_Inicio";
    public static final String PA_BUSCAR_FILTRO_DNI_FIN = "Filtro_DNI_Fin";
    
    public static final String PA_BUSCAR_FILTRO_MATRICULA_INICIO = "Filtro_Matricula_Inicio";
    public static final String PA_BUSCAR_FILTRO_MATRICULA_FIN = "Filtro_Matricula_Fin";
    
    public static final String PA_BUSCAR_FILTRO_CAMARA_INICIO = "Filtro_Camara_Inicio";
    public static final String PA_BUSCAR_FILTRO_CAMARA_FIN = "Filtro_Camara_Fin";
    
    
    //</editor-fold>
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "Id")
    private Integer id;
    @Column(name = "FechaYHora")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fechaYHora;
    @Basic(optional = false)
    @Column(name = "Foto")
    private String foto;
    @Basic(optional = false)
    @Column(name = "TipoMovimiento")
    @Enumerated(EnumType.STRING)
    private EnumeracionesEntidades.TipoMovimiento movimiento;
    @JoinColumns({
    @JoinColumn(name = "Matricula_Matricula", referencedColumnName = "Matricula")})
    @ManyToOne(optional = false)
    private Matricula matricula;
    @JoinColumn(name = "Camara_id", referencedColumnName = "id")
    @ManyToOne(optional = false)
    private Camara camaraid;

    public Movimientos() {
    }

    public Movimientos(Integer id) {
        this.id = id;
    }

    public Movimientos(Integer id, String foto) {
        this.id = id;
        this.foto = foto;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Date getFechaYHora() {
        return fechaYHora;
    }

    public void setFechaYHora(Date fechaYHora) {
        this.fechaYHora = fechaYHora;
    }

    public String getFoto() {
        return foto;
    }

    public void setFoto(String foto) {
        this.foto = foto;
    }

    public TipoMovimiento getMovimiento() {
        return movimiento;
    }

    public void setMovimiento(TipoMovimiento movimiento) {
        this.movimiento = movimiento;
    }
    

    public Matricula getMatricula() {
        return matricula;
    }

    public void setMatricula(Matricula matricula) {
        this.matricula = matricula;
    }

    public Camara getCamaraid() {
        return camaraid;
    }

    public void setCamaraid(Camara camaraid) {
        this.camaraid = camaraid;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Movimientos)) {
            return false;
        }
        Movimientos other = (Movimientos) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "jumavidesktop.Persistencia.entidades.Movimientos[ id=" + id + " ]";
    }

}
